import { pinyin, polyphonic } from 'pinyin-pro'

/**
 * 将中文名字转换为拼音
 * @param text 要转换的中文名字
 * @returns 转换后的拼音,如果不包含中文则返回空字符串
 */
export const convertNameToPinyin = (text: string): string => {
  const chineseReg = /[\u4E00-\u9FA5\uF900-\uFA2D]/
  if (!chineseReg.test(text)) return ''

  return convertSpecialStr(pinyin(text, { toneType: 'none' }).toUpperCase())
}

/**
 * 获取多音字的所有可能拼音
 * @param text 包含多音字的中文文本
 * @returns 多音字的所有可能拼音数组,如果不包含中文则返回空数组
 */
export const choosePinyin = (text: string): string[][] => {
  const chineseReg = /[\u4E00-\u9FA5\uF900-\uFA2D]/
  if (!text.trim() || !chineseReg.test(text)) return []

  const pinyinArr = polyphonic(text, { type: 'array', toneType: 'none' })
  return pinyinArr.map((item) => item.map(convertSpecialStr))
}

/**
 * 将拼音中的特殊字符替换
 * @param str 包含特殊字符的拼音字符串
 * @returns 替换特殊字符后的拼音字符串
 */
const convertSpecialStr = (str: string): string => {
  return str.replace(/[Üü]/g, (match) => (match === 'Ü' ? 'V' : 'v'))
}
